Versi 1
| Field | Isi |
|---|---|
| Dokumen ID | VBS-LAP-023 |
| Deskripsi | Kumpulan laporan pembelian per dimensi: per invoice, rinci per barang, per supplier, per jenis barang, per barang, serta laporan custom pivot |
| Nomor Revisi | 1 |
| Tanggal | 2026-10-04 |
| Keterangan | Dokumentasi baseline dari dokumentasi fitur demo dan kode FE |
1. Ringkasan
a. In scope
- User membuka daftar Laporan Pembelian dan hanya melihat laporan yang diizinkan perannya.
- Laporan yang dicakup: pembelian per invoice, pembelian rinci, pembelian per supplier, pembelian per jenis barang, pembelian per barang, dan laporan custom pembelian (pivot).
- User mengisi periode, cabang, dan mode pembelian, lalu menambah filter supplier, user, cluster, status tagihan, asal pembelian, atau jatuh tempo sesuai halaman.
- User melihat total ringkas (total pembelian, belum lunas, kuantitas, rata-rata harga beli) dan membuka invoice atau PO asal.
- User melihat rincian metode pembayaran sebuah invoice pembelian.
- User menyusun laporan pivot dengan baris, kolom, dan nilai yang dipilih, lalu menyimpan susunan sebagai template.
- User mengekspor laporan ke Excel sesuai hak akses.
b. Catatan
c. Kesimpulan
- [FE] -
- [BE] -
2. Functional Requirement
| Kode | Deskripsi |
|---|---|
| FR-01 | Hub /brand/:id/laporan-pembelian menampilkan kartu laporan sesuai izin user |
| FR-02 | Pembelian per invoice (/daftar-pembelian) menampilkan daftar invoice tercetak beserta supplier, user, status tagihan, total, dan PPN untuk brand PKP |
| FR-03 | User dapat melihat rincian metode pembayaran sebuah invoice dari pembayaran kontan dan pelunasan hutang |
| FR-04 | Pembelian rinci (/pembelian-rinci) menampilkan baris barang per invoice: barang, satuan, kuantitas, harga beli, diskon, subtotal, dengan opsi kelompokkan |
| FR-05 | Pembelian per supplier (/pembelian-persupplier) menampilkan agregat total invoice, belum dibayar, dan total pembelian per supplier |
| FR-06 | Pembelian per jenis barang (/pembelian-perjenisbarang) dan per barang (/pembelian-perbarang) menampilkan kuantitas, total, persentase, dan persentase kumulatif |
| FR-07 | Laporan custom pembelian (/laporan-pembelian-pivot) menyusun pivot dari baris, kolom, dan nilai terpilih serta menyimpan template ke konfigurasi brand |
| FR-08 | User dengan izin Excel dapat mengekspor laporan yang sedang tampil ke file Excel |
3. Use Case List
| Kode | Deskripsi |
|---|---|
| UC-01 | Membuka daftar laporan pembelian |
| UC-02 | Melihat pembelian per invoice |
| UC-03 | Melihat rincian metode pembayaran invoice |
| UC-04 | Melihat pembelian rinci per barang |
| UC-05 | Melihat pembelian per supplier |
| UC-06 | Melihat pembelian per jenis barang dan per barang |
| UC-07 | Menyusun laporan pivot pembelian dan menyimpan template |
| UC-08 | Mengekspor laporan pembelian ke Excel |
4. Use Case Scenario
UC-01 : Membuka daftar laporan pembelian
| Aktor | User dengan akses laporan pembelian |
| Deskripsi | User memilih laporan pembelian yang ingin dibuka |
| Prekondisi | User sudah login dan brand aktif |
| Alur utama | 1. User membuka menu Laporan lalu tab Pembelian. 2. Sistem menampilkan kartu laporan yang diizinkan. 3. User memilih salah satu kartu. 4. Sistem membuka halaman laporan dalam kondisi kosong dengan pesan "Lengkapi filter untuk menampilkan data". |
| Alur negatif | - Jika user tidak memiliki izin laporan tertentu, kartunya tidak ditampilkan. - Jika tidak ada kartu sama sekali, muncul "Tidak memiliki akses". |
| Bisnis rule | - Izin per kartu cakupan dokumen ini: #lap-pembelian-per-inv, #lap-pembelian-rinci, #lap-pembelian-per-supplier, #lap-pembelian-jenis-barang, #lap-pembelian-per-barang, #lap-custom.- Kartu lain di hub (pesanan belum diproses, pengembalian dana, retur, hutang) punya dokumen TDD terpisah. - Tombol kembali di setiap laporan mengarah ke hub laporan pembelian. |
| Postkondisi | Halaman laporan terpilih terbuka |
| Trigger | User membuka tab Pembelian pada menu Laporan |
| Kode FR | FR-01 |
UC-02 : Melihat pembelian per invoice
| Aktor | User pembelian / akuntansi |
| Deskripsi | User melihat daftar invoice pembelian dalam periode beserta status tagihannya |
| Prekondisi | User memiliki izin #lap-pembelian-per-inv |
| Alur utama | 1. User mengisi periode, cabang, dan mode pembelian. 2. User dapat menambah filter nomor invoice, cluster, supplier, user, status tagihan, asal pembelian, dan jatuh tempo. 3. User menekan tombol tampilkan. 4. Sistem menampilkan invoice: tanggal, nomor invoice, asal nota, user, cabang, supplier, status tagihan, dan total. 5. Sistem menampilkan kartu total pembelian dan belum lunas. 6. User dapat mengklik nomor invoice atau PO untuk membuka dokumen di tab baru. |
| Alur negatif | - Jika periode kosong, muncul alert "Periode Tidak Boleh Kosong". - Jika mode pembelian kosong, muncul alert "Mode Pembelian harus diisi!". - Jika data kosong atau gagal dimuat, muncul notifikasi "Data yang anda filter tidak ditemukan silahkan ganti filter". |
| Bisnis rule | - Hanya invoice tercetak yang diambil kecuali filter nomor invoice spesifik. - Status tagihan menampilkan lunas atau belum lunas dari sisa hutang. - Kolom total sebelum PPN dan PPN hanya tampil bila brand berstatus Pengusaha Kena Pajak. - Total belum lunas memakai sisa hutang, bukan total invoice. |
| Postkondisi | Daftar invoice dan total ringkas tampil |
| Trigger | User menekan tombol tampilkan |
| Kode FR | FR-02 |
UC-03 : Melihat rincian metode pembayaran invoice
| Aktor | User pembelian / akuntansi |
| Deskripsi | User melihat rincian metode pembayaran kontan dan pelunasan hutang sebuah invoice |
| Prekondisi | Invoice pembelian sudah tampil di daftar |
| Alur utama | 1. User mengklik total tagihan invoice yang memiliki riwayat bayar. 2. Sistem membuka modal metode pembayaran. 3. Sistem menampilkan pembayaran kontan dan pembayaran hutang per metode. 4. Jika tidak ada metode, muncul "Metode Bayar masih kosong". |
| Alur negatif | - Jika gagal memuat data pembayaran, modal menampilkan daftar kosong atau pesan error. |
| Bisnis rule | - Rincian digabung dari pembayaran kontan pembelian dan laporan pembayaran hutang. |
| Postkondisi | Modal metode pembayaran tampil |
| Trigger | User mengklik total tagihan invoice |
| Kode FR | FR-03 |
UC-04 : Melihat pembelian rinci per barang
| Aktor | User pembelian / akuntansi |
| Deskripsi | User melihat baris barang per invoice pembelian |
| Prekondisi | User memiliki izin #lap-pembelian-rinci |
| Alur utama | 1. User mengisi periode dan cabang. 2. User dapat memilih pengelompokan: semua, per supplier, per cabang, per jenis barang, atau per barang. 3. User dapat menambah filter supplier, barang, cluster, jenis barang, dan tipe satuan terkecil. 4. User menekan tombol tampilkan. 5. Sistem menampilkan baris: invoice, barang, satuan, kuantitas, harga beli, diskon, subtotal, serta total ringkas. |
| Alur negatif | - Jika periode kosong, muncul alert "Periode Tidak Boleh Kosong". - Jika data kosong, muncul "Data yg anda filter tidak ditemukan silahkan ganti filter". |
| Bisnis rule | - Pengelompokan dilakukan di tampilan; data diambil per baris barang invoice. - Kolom diskon mengikuti pengaturan rincian pembelian brand. |
| Postkondisi | Tabel pembelian rinci tampil |
| Trigger | User menekan tombol tampilkan |
| Kode FR | FR-04 |
UC-05 : Melihat pembelian per supplier
| Aktor | User pembelian / akuntansi |
| Deskripsi | User melihat agregat pembelian dikelompokkan per supplier |
| Prekondisi | User memiliki izin #lap-pembelian-per-supplier |
| Alur utama | 1. User mengisi periode, cabang, dan supplier opsional. 2. User menekan tombol tampilkan. 3. Sistem menampilkan per supplier: total invoice, invoice belum terbayar, invoice belum diproses, total belum dibayar, total lunas, dan total pembelian. 4. User dapat mengaktifkan lihat rincian pembelian untuk melihat daftar invoice per supplier. |
| Alur negatif | - Jika periode kosong, muncul alert "Periode Tidak Boleh Kosong". - Jika rincian invoice belum diproses kosong, muncul "Invoice Pembelian Belum diproses masih kosong". |
| Bisnis rule | - Agregasi per supplier dilakukan di tampilan dari data invoice. - Invoice belum diproses dapat dibuka lewat modal dari kolom terkait. |
| Postkondisi | Agregat per supplier tampil |
| Trigger | User menekan tombol tampilkan |
| Kode FR | FR-05 |
UC-06 : Melihat pembelian per jenis barang dan per barang
| Aktor | User pembelian / akuntansi |
| Deskripsi | User melihat agregat pembelian per jenis barang atau per barang beserta persentase |
| Prekondisi | User memiliki izin #lap-pembelian-jenis-barang atau #lap-pembelian-per-barang |
| Alur utama | 1. User mengisi periode dan cabang. 2. User dapat memfilter jenis barang atau barang. 3. User menekan tombol tampilkan. 4. Sistem menampilkan kuantitas, persentase, persentase kumulatif, dan total. 5. Pada per barang, user dapat membuka modal rincian varian SKU. |
| Alur negatif | - Jika periode kosong, muncul alert "Periode Tidak Boleh Kosong". - Jika varian SKU kosong, muncul "Varian SKU masih kosong". |
| Bisnis rule | - Jenis barang kosong ditampilkan sebagai "Tidak Diisi". - Persentase dihitung terhadap total pembelian periode yang difilter. |
| Postkondisi | Agregat per jenis atau per barang tampil |
| Trigger | User menekan tombol tampilkan |
| Kode FR | FR-06 |
UC-07 : Menyusun laporan pivot pembelian dan menyimpan template
| Aktor | User dengan izin laporan custom |
| Deskripsi | User menyusun laporan pivot pembelian lalu menyimpan susunan sebagai template |
| Prekondisi | User memiliki izin #lap-custom |
| Alur utama | 1. User membuka laporan custom pembelian. 2. User memilih periode, data baris (maksimal 4), data kolom, dan nilai terukur (maksimal 3). 3. User menekan tampilkan laporan. 4. Sistem menampilkan tabel pivot. 5. User menyimpan nama template; sistem menyimpan ke konfigurasi brand. |
| Alur negatif | - Jika baris/kolom belum lengkap, muncul "Lengkapi Data Baris dan Kolom untuk melihat Laporan". - Jika nama template kosong, muncul "Nama Template harus di isi". - Jika nama template duplikat, muncul "Nama Template harus uniq". |
| Bisnis rule | - Dimensi baris/kolom mencakup user, status lunas, tercetak, konsinyasi, cabang, supplier, tempo, bulan, tahun, kuartal, dan PO. - Nilai terukur: total pembelian, PPN, service charge, diskon global, rata-rata total pembelian. - Template disimpan di konfigurasi brand laporan pembelian. |
| Postkondisi | Pivot tampil dan/atau template tersimpan |
| Trigger | User menekan tampilkan laporan atau simpan template |
| Kode FR | FR-07 |
UC-08 : Mengekspor laporan pembelian ke Excel
| Aktor | User dengan izin Excel |
| Deskripsi | User mengunduh laporan pembelian yang sedang tampil sebagai file Excel |
| Prekondisi | Laporan sudah tampil dan user memiliki izin excel pada laporan tersebut |
| Alur utama | 1. User menekan tombol export Excel. 2. Sistem menyusun baris dari data tabel yang tampil. 3. Browser mengunduh file Excel, mis. "Laporan Daftar Pembelian.xlsx". |
| Alur negatif | - Jika periode kosong, muncul alert "Periode Tidak Boleh Kosong". - Jika data belum ada, muncul "Data tidak ditemukan" atau "Silahkan Lihat Laporan terlebih dahulu baru, kemudian tekan Unduh File!". |
| Bisnis rule | - Ekspor dibuat di browser tanpa memanggil API baru. - Kolom PPN mengikuti status PKP brand. - Tombol unduh pada pivot pembelian belum terhubung ke handler ekspor. |
| Postkondisi | File Excel terunduh |
| Trigger | User menekan tombol export Excel |
| Kode FR | FR-08 |
5. Data Flow Diagram
DFD-01 — Alur data laporan pembelian
6. Sequence Diagram
SD-01 — UC-01 : Membuka daftar laporan pembelian
SD-02 — UC-02 : Melihat pembelian per invoice
SD-03 — UC-03 : Melihat rincian metode pembayaran invoice
SD-04 — UC-04 : Melihat pembelian rinci per barang
SD-05 — UC-05 : Melihat pembelian per supplier
SD-06 — UC-06 : Melihat pembelian per jenis barang dan per barang
SD-07 — UC-07 : Menyusun laporan pivot pembelian dan menyimpan template
SD-08 — UC-08 : Mengekspor laporan pembelian ke Excel
7. Table Schema
8. API Schema
| Endpoint | Status | Perubahan |
|---|---|---|
POST /laporan-pembelian/purchase-report | existing | - |
POST /laporan-pembelian/pembelian-rinci | existing | - |
POST /laporan-pembelian/detail-purchase-report | existing | - |
POST /financial-report/pembayaran-hutang-report | existing | - |
PUT /brand/config/:id | existing | - |
GET /gudang | existing | - |
POST /supplier/get-supplier | existing | - |